/**
 * UniApp统一提示工具
 * 功能：
 * 1. 支持success/error/warning/info/loading类型
 * 2. 支持自定义配置和全局默认配置
 * 3. 自动管理loading提示（防止重复）
 * 4. 提供链式调用和类型快捷方法
 * 5. 支持页面跳转时自动清理
 */

// 默认配置
const DEFAULT_CONFIG = {
  duration: 2000, // 默认显示时长(ms)
  loadingDuration: 0, // loading不自动关闭
  mask: false, // 默认不显示遮罩
  iconMap: {
    success: 'success',
    error: 'error',
    warning: 'none',
    info: 'none',
    loading: 'loading'
  },
  titleMap: {
    success: '操作成功',
    error: '操作失败',
    warning: '提示',
    info: '信息',
    loading: '加载中...'
  }
}

// 当前loading实例（用于管理重复）
let currentLoading = null

/**
 * 核心提示方法
 * @param {Object} options 配置项
 * @param {string} [options.title] 提示文字（优先使用）
 * @param {string} [options.type] 提示类型（success/error/warning/info/loading）
 * @param {number} [options.duration] 显示时长（ms）
 * @param {boolean} [options.mask] 是否显示遮罩（仅loading有效）
 * @param {boolean} [options.icon] 自定义图标（覆盖type默认图标）
 * @returns {Object|undefined} loading类型返回可关闭的实例
 */
export function showToast(options = {}) {
  // 合并配置
  const type = options.type || 'info'
  const finalConfig = {
    ...DEFAULT_CONFIG,
    title: options.title || DEFAULT_CONFIG.titleMap[type],
    icon: options.icon || DEFAULT_CONFIG.iconMap[type],
    duration: options.duration !== undefined ?
      options.duration :
      (type === 'loading' ? DEFAULT_CONFIG.loadingDuration : DEFAULT_CONFIG.duration),
    mask: options.mask || DEFAULT_CONFIG.mask
  }

  // 处理loading类型（特殊逻辑）
  if (type === 'loading') {
    return handleLoading(finalConfig)
  }

  // 普通提示
  uni.showToast({
    title: finalConfig.title,
    icon: finalConfig.icon,
    duration: finalConfig.duration,
    mask: finalConfig.mask
  })
}

// 处理loading类型
function handleLoading(config) {
  // 如果已有loading，先关闭
  if (currentLoading) {
    uni.hideLoading({
      success: () => {
        showNewLoading(config)
      }
    })
  } else {
    showNewLoading(config)
  }

  // 返回可关闭的实例
  return {
    close: () => {
      if (currentLoading) {
        uni.hideLoading()
        currentLoading = null
      }
    }
  }
}

// 显示新的loading
function showNewLoading(config) {
  currentLoading = uni.showLoading({
    title: config.title,
    mask: config.mask
  })
}

/**
 * 类型快捷方法
 */
export const showSuccess = (title, duration) =>
  showToast({ title, type: 'success', duration })

export const showError = (title, duration) =>
  showToast({ title, type: 'error', duration })

export const showWarning = (title, duration) =>
  showToast({ title, type: 'warning', duration })

export const showInfo = (title, duration) =>
  showToast({ title, type: 'info', duration })

export const showLoading = (title = '加载中...', mask = true) =>
  showToast({ title, type: 'loading', mask })

/**
 * 全局提示管理
 */
export function hideAllToast() {
  uni.hideToast()
  if (currentLoading) {
    uni.hideLoading()
    currentLoading = null
  }
}

/**
 * 页面生命周期建议使用
 * 在onUnload中调用清理
 */
export function setupPageToast() {
  return {
    onUnload() {
      hideAllToast()
    }
  }
}




